<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>ECMA测试</title>
  </head>
  <body>
    <script>
      //  1.  Javascript 的数据类型有几种？分别又有哪些类型？（5）
      /*
      数据类型有两种，一种是原始数据类型，一种是复杂数据类型
      javascript中的数据类型有
      number object boolean string undefined null  
      */
      //  2.  return 有那两个作用？ 构造函数里return会怎么样？（5）
      /*
        结束当前运行的代码，return后面的代码不执行
        返回默认值，给return设置一个默认值，代码结束后就返回这个默认值
        在构造函数里添加return，没有返回值
      */
      //  3.  undefined 和 null 的区别？什么时候会得到undefined？（5）
      /*
      undefined：定义未赋值
      null：赋值未定义
        
        没有赋值也会出现undefined
        在结果无法显示的时候返回undefined
        没有返回值，默认返回undefined
        
      */
      //  4.  使用 continue 或 break 终止循环时，两种方式的区别是？（5）
      /*
        cintinue：跳过本次循环
        break:结束整个循环
      */
      //  5.  如何判断字符串内是否包含指定字符？（5）
      /*
      使用indexOf()，include，find，findIndex
      */
      //  6. 值传递和引用传递的区别？ （5）
      /*
      值传递：传递的不是参数的地址，而是参数拷贝后的副本
      引用传递：传递的是实际参数的地址
      */
      //  7. 请尽量列举出数组的方法,并注明其作用以及会不会修改原数组，至少10种（10）
      /*
      push-pop：尾部删除/会
      shift-unshift：头部删除/会
      splice：中间删除/添加/会
      slice：截取字符串/不会
      concat:拼接数组/不会
      join：把数据所有元素链接成一个字符串，并返回/会
      indexOf：查找元素，找到就返回索引，找不到就返回-1/不会
      include:查找元素，找到就返回true，找不到就返回false/不会
      reverse：颠倒数组/会
      some：自带遍历，条件判断，成立就返回true，不成立就返回false/不会
      */
      //  8.  请写出以下输出的结果和原因；（10）
      var bar = true,
        number = 0;
      console.log(bar + 0);//输出1，将true转化为1，1+0=1
      console.log(bar + 'xyz');//输出truexyz，字符串类型，不会转化，正常连接字符串
      console.log(bar + true);//输出2，进行加法运算，将两个true转化为两个1,1+1=2
      console.log(+true);//输出1，+号前面没有添加元素，所以输出1
      console.log(!'bluej');//输出false
      console.log(number++);//输出0,0++得0
      console.log(++number);//输出2，++0，先自增，再赋值，1+上一步结果转化为1=2
      console.log(number);//输出2，上一步得出2
      10 > 20 || console.log('haha');//输出haha，逻辑或，有一个true就输出
      10 > 20 && console.log('haha');//没有结果
      //  9. 将多个数组进合并后再去重；对于去重的方案要求3种及以上（10）

      9.1
//       var arr1 = [1, 2, 3],
//         arr2 = [2, 3, 4, 5];
//   arr1=arr1.concat(arr2)
// console.log(arr1);
// arr1.sort(function (a, b) {
//   return a - b;
// });
// for (var i = 0; i < arr1.length; i++) {
//   if (arr1[i] === arr1[i + 1]) {
//     arr1.splice(i, 1);
//     i--;
//   }
// }


9.2
// var arr1 = [1, 2, 3],
//         arr2 = [2, 3, 4, 5];
//   arr1=arr1.concat(arr2)
// console.log(arr1);
// for (var i = 0; i < arr1.length; i++) {
//   var index = arr1.indexOf(arr1[i], i + 1);
//   if (index != -1) {
//     arr1.splice(index, 1);
//     i--;
//   }
// }
// console.log(arr1);

9.3
// var arr1 = [1, 2, 3],
//         arr2 = [2, 3, 4, 5];
//   arr1=arr1.concat(arr2)
// console.log(arr1);
// console.log([...new Set(arr1)]);
      //10.将 str="再见，还会再见吗燕子，再见的时候你要幸福好不好，燕子你要开心，你要幸福，好不好，开心啊，幸福！你的世界以后没有我了，没关系你要幸福，🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊燕子，燕子，燕子，燕子，燕子，燕子，燕子你把我带走吧，燕子！"里面的所有"燕子"替换成"jack"不要用replaceAll(10)
      while(str.indexOf('燕子')!==-1){
    str = str.replace('燕子','jack')
  }
  console.log(str)
      //11. 找出数组中年龄小于18岁的女生(girl)的信息重新组成新的数组,并且将她们count变为现有的平方（10）
      var arr3 = [
        { name: '彭于晏', sex: 'boy', age: 18, count: 20 },
        { name: '迪丽热巴', sex: 'girl', age: 17, count: 30 },
        { name: '吴彦祖', sex: 'boy', age: 16, count: 40 },
        { name: '古力娜扎', sex: 'girl', age: 15, count: 50 },
        { name: '刘德华', sex: 'boy', age: 20, count: 60 },
        { name: '刘亦菲', sex: 'girl', age: 13, count: 70 },
        { name: '张学友', sex: 'boy', age: 14, count: 80 },
      ];
      var foo = ''
      for (var i = 0; i < arr3.length; i++) {
      if (arr3[i].sex == 'girl'&& arr3[i].age <= 18) {
      foo = arr3[i];
      console.log(foo);
  }
}
      // 12. 统计字符串'abbcccddddd'中每个字符出现的次数，统计数组['a','b','b','c','c','c','d','d','d','d','d'中每个字符出现的次数(10分)
    </script>
  </body>
</html>
